package com.night.icm.service.base.service;

import com.night.icm.common.utils.PageDataDTO;
import com.night.icm.common.utils.SimpleDataDTO;
import com.night.icm.model.base.ProfessionDTO;

import java.util.List;

/**
 * ProfessionService
 *
 * @author Liao ZhiYong
 * @date 2020/1/7
 */
public interface ProfessionService {

    /**
     * 分页查询专业
     *
     * @param page      页号，从0开始
     * @param size      每页纪录条数
     * @param sort      排序字段, 例如：字段1,asc,字段2,desc
     * @param code 专业代码
     * @param name      专业名称
     * @param academyId 学院id
     * @return 专业信息
     */
    PageDataDTO<ProfessionDTO> findOnePage(int page, int size, String sort, String code, String name, String academyId);

    /**
     * 新增专业
     *
     * @param professionDTO 专业信息
     * @return 新增专业信息
     */
    ProfessionDTO create(ProfessionDTO professionDTO);

    /**
     * 删除专业
     *
     * @param id 专业id
     */
    void deleteById(String id);

    /**
     * 更新专业信息
     *
     * @param id            专业id
     * @param professionDTO 专业信息
     * @return 更新后专业信息
     */
    ProfessionDTO update(String id, ProfessionDTO professionDTO);

    /**
     * 根据id查找专业信息
     *
     * @param id 专业id
     * @param isGetClass 是否获取班级信息
     * @return 专业信息
     */
    ProfessionDTO findById(String id, Boolean isGetClass);

    /**
     * 查找所有专业信息
     *
     * @return 所有专业信息
     */
    List<ProfessionDTO> findAll();

    /**
     * 检查专业code是否已存在
     *
     * @param code 专业编号
     * @return 是否存在
     */
    SimpleDataDTO<Boolean> checkCodeExist(String code);

    /**
     * 查找所有专业信息并排序
     *
     * @param param   排序参数
     * @param pattern 排序模式: asc/desc
     * @return 专业信息
     */
    List<ProfessionDTO> findAllBySort(String param, String pattern);

    /**
     * 统计专业数量
     *
     * @return 统计专业数量
     */
    Long countProfession();
}
